package com.hc.comm.base;


import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.hc.comm.utils.Constant.ResultEnum;
import com.hc.comm.utils.FrameUtil;



/**
 * 操作结果信息封装，默认操作结果是成功的
 * 
 * @author 
 */
public class OperateResultModel implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 操作结果状态码(一级状态码)
	 */
	private String resultState;

	/**
	 * 操作反馈信息(操作描述信息)
	 */
	private String feedBackInfo;

	/**
	 * 操作中的其他信息
	 */
	private Map<Object, Object> extendMap;

	/**
	 * 获取状态码
	 * 
	 * @return
	 */
	public String getResultState() {
		return resultState;
	}

	/**
	 * 设置状态码
	 * 
	 * @param resultState
	 */
	public void setResultState(String resultState) {
		this.resultState = resultState;
	}

	/**
	 * 操作反馈信息(操作描述信息)
	 * 
	 * @return
	 */
	public String getFeedBackInfo() {
		return feedBackInfo;
	}

	/**
	 * 设置操作描述信息
	 * 
	 * @param feedBackInfo
	 */
	public void setFeedBackInfo(String feedBackInfo) {
		this.feedBackInfo = feedBackInfo;
	}

	public OperateResultModel result(String resultState, String resourceKey,
			Object... param) {
		this.resultState = resultState;
		this.setFeedBackInfoByResource(resourceKey, param);
		return this;
	}

	/**
	 * 设置操作描述信息
	 * 
	 * @param feedBackInfo
	 */
	public void setFeedBackInfoByResource(String resourceKey, Object... param) {
		this.feedBackInfo = FrameUtil.getResource(resourceKey, param);
	}

	/**
	 * 获取操作中的其他信息
	 * 
	 * @return
	 */
	public Map<Object, Object> getExtendMap() {
		if (this.extendMap == null) {
			this.extendMap = new LinkedHashMap<Object, Object>();
		}
		return extendMap;
	}

	/**
	 * 向extendMap[操作中的其他信息]中存值
	 * 
	 * @param key
	 * @param value
	 * @return
	 */
	public void putValueToExtendmap(Object key, Object value) {
		this.getExtendMap().put(key, value);
	}

	/**
	 * 从extendMap[操作中的其他信息]中存值
	 * 
	 * @param key
	 * @param value
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public <T extends Object> T getValueFormExtendmap(Object key) {
		return ((T) this.getExtendMap().get(key));
	}

	/**
	 * 创建当前类的一个对象,每次调用该方法将获取一个新的实例
	 * 
	 * @return
	 */
	public static OperateResultModel createOperateResultModel() {
		return new OperateResultModel();
	}

	/**
	 * 创建当前类的一个对象,每次调用该方法将获取一个新的实例
	 * 
	 * @return
	 */
	public static OperateResultModel createOperateResultModel(
			String resultState, String resourceKey, Object... param) {
		OperateResultModel resultModel = new OperateResultModel();
		return resultModel.result(resultState, resourceKey, param);
	}

	public OperateResultModel() {
		this.resultState = ResultEnum.SUCCESS.getResult();
		this.feedBackInfo = FrameUtil.getResource("normal.00001");
	}

	public static void main(String[] args) {
		System.out.println(JSON.toJSONString(new OperateResultModel()));
	}
}
